# coding:utf8
# 何宇翔-P42023
# 第五周


# 1. 如何为函数定义keyword-only参数（写出个例子即可）？
# 2. 什么是LEGB，请解释
# 3. 二叉树的性质
# 4. 使用本周学习的技术改造第二周的计算器实现，其目标如下：
# 5. 1. 运行后提示让用户输入一个数字
#    2. 提示输入操作符（+ - * /）
#    3. 再次提示输入一个数字
#    4. 打印计算结果
#    5. 在不退出程序的前提下，可以允许用户继续输入新一组数据计
#    6. 尽可能改善用户体验（新需求）




# 题目1



def foo1(y=90,**kwargs):
    pass

# 题目2
'''
    L:局部作用域,本函数内有效
    E:嵌套作用域，嵌套函数内有效，应用于闭包
    G:全局作用域，当前py文件内有效
    B:内建函数，python内置命名空间
    按照L->E->G->B的顺序查找变量
'''

# 题目3
'''
    度：树的度=节点的最大度数
    有序树：兄弟有先后次序
    无序树：节点无序，可交换
    森林：m棵不相交的树的集合

    具有唯一的根
    子树不相交
    根节点无前驱，叶子节点无后继
    父节点比子节点的级别少1

    二叉树：每个节点最多2棵子树
    二叉树：有序，左子树，右子树
    斜树：一斜到底，同样深度节点最少
    满二叉树：一颗二叉树的所有分支节点都存在左子树和右子树，
            并且所有叶子结点只能存在最下面一层。
    同样深度k二叉树中，满二叉树节点最多2^k-1
    完全二叉树：深度k，第1~k-1层的节点达到最大个数，
            在第k曾的所有节点，都集中在最左边
    满二叉树是完全二叉树，反之不对

    二叉树第i层之多2^(i-1)个节点
    终端节点数n0，度数为2的节点数n2，则n0=n2+1
    高度为k的二叉树，至少k个节点
    含有n个节点的二叉树，高度至多为n，最小为math.ceil(log(n+1)/log2)
    具有n个节点的完全二叉树的深度是int(log(n)/log2 +1)

    完全二叉树，逐层编号，则如果i==1,必为根节点，i>1时，i//2是双亲节点
        当父节点为i，左侧子节点为2i，右侧子节点2i+1
        如果2i>n，则节点i无左子节点，也没有右节点
        如果2i+1>n，则节点i无右节点


'''

# 5. 1. 运行后提示让用户输入一个数字
#    2. 提示输入操作符（+ - * /）
#    3. 再次提示输入一个数字
#    4. 打印计算结果
#    5. 在不退出程序的前提下，可以允许用户继续输入新一组数据计
#    6. 尽可能改善用户体验（新需求）

# 忽略正确性检查

def test4():
    # 加
    def add(x:int,y:int):
        return x+y
    # 减
    def sub(x:int,y:int):
        return x-y
    # 乘
    def mul(x:int,y:int):
        return x*y
    # 除
    def div(x,y):
        return x/y
    
        

    option={
        '+':add,
        '-':sub,
        '*':mul,
        '/':div
    }
    while True:
        # 永不退出……
        num1=input('输入数字1>>>')
        if num1=='q':
            break
        method=input('输入运算符+-*/>>>')
        if method=='q':
            break
        if method not in option.keys():
            print('运算符错误！重新输入！')
            continue

        num2=input('输入数字2>>>')
        if num2=='q':
            break
        print('{}'.format(option[method](int(num1),int(num2))))



# test4()
